﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace KPIS.GERP.GHRMS.APP.App_UI.Forms
{
    public partial class ImagePerson : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var filePath = Request["filePath"];
            var fileName = Path.GetFileName(filePath);
            var fileUrl = "";
            if (string.IsNullOrEmpty(fileName))
            {
                fileUrl = "~/App_UI/Images/Buttons/Person_non.gif";
            }
            else
            {
                filePath = (filePath ?? "");
                filePath = !filePath.Contains(":") && !filePath.StartsWith("/") && !filePath.StartsWith("~") ? "/" + filePath : filePath;
                filePath = !filePath.Contains(":") && !filePath.StartsWith("~") ? "~" + filePath : filePath;
                fileUrl = filePath; 
            }
            
            if (!string.IsNullOrEmpty(fileName) && !File.Exists(Server.MapPath(filePath)))
            {
                fileUrl = "~/App_UI/Images/Buttons/image_not_found.png";
            }
            Response.ContentType = "image/png";
            // byte[] data = System.IO.File.ReadAllBytes(Server.MapPath(fileUrl));
            // Response.OutputStream.Write(data, 0, data.Length);
            string filiePath = Server.MapPath(fileUrl);
             
            Bitmap image = CreateThumbnail(filiePath, 40, 40);
            if(image == null)
            {
                throw new Exception("Image is null " + filiePath);
            }

            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                ms.WriteTo(Response.OutputStream);
            }

            Response.OutputStream.Flush();
            Response.End();
        }

        public static Bitmap CreateThumbnail(string lcFilename, int lnWidth, int lnHeight)
        {

            System.Drawing.Bitmap bmpOut = null;

            try
            {
                Bitmap loBMP = new Bitmap(lcFilename);
                ImageFormat loFormat = loBMP.RawFormat;

                decimal lnRatio;
                int lnNewWidth = 0;
                int lnNewHeight = 0;

                if (loBMP.Width < lnWidth && loBMP.Height < lnHeight)
                    return loBMP;

                if (loBMP.Width > loBMP.Height)
                {
                    lnRatio = (decimal) lnWidth/loBMP.Width;
                    lnNewWidth = lnWidth;
                    decimal lnTemp = loBMP.Height*lnRatio;
                    lnNewHeight = (int) lnTemp;
                }
                else
                {
                    lnRatio = (decimal) lnHeight/loBMP.Height;
                    lnNewHeight = lnHeight;
                    decimal lnTemp = loBMP.Width*lnRatio;
                    lnNewWidth = (int) lnTemp;
                }


                bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
                Graphics g = Graphics.FromImage(bmpOut);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
                g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);

                loBMP.Dispose();
            }
            catch
            {
                return null;
            }
            return bmpOut;
        }

    }
}